package com.qf.controller;

import com.qf.entity.Stu;
import com.qf.entity.StudentVO;
import com.qf.service.StuService;
import com.qf.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;

/**
 * --- 天道酬勤 ---
 *
 * @author 卢泓光
 * @date 2025/8/15
 * @desc
 */
@Controller
@RestController
public class StuController {

    @Autowired
    private StuService stuService;

    private  Stu stu;


    /**
     * 根据ID查询学生数据
     */
    @GetMapping("stu/query")
    public R queryStuById(Integer id) {
        //查询的学生对象封装到Stu中
        Stu stu = stuService.queryStuById(id);
        return R.success(stu);
    }

    /**
     * 查询全部数据
     *
     */
    @GetMapping("stu/queryAll")
    public R queryAll() {
        //集合装
        List<Stu> list = stuService.queryAll();
        return R.success(list);
    }

    /**
     * 模拟搜索框根据年龄或者姓名查询学生
     */
    @GetMapping("stu/queryLike")
    public R queryLike(String sname, Integer age) {
        List<Stu> list = stuService.queryLike(sname, age);
        //判断
        if (list == null || list.size() == 0) {
            return R.fail();
        }
        return R.success(list);
    }
    /**
     *接收请求为Map集合形式
     */
    @GetMapping("stu/queryLikeMap")
    public R queryLikeMap(@RequestParam HashMap<String,Object> map) {
        List<Stu> list = stuService.queryLikeMap(map);
        if (list == null || list.size() == 0) {
            return R.fail();
        }
        return R.success(list);
    }
    /**
     * 全表更新
     */
    //前端传输出来的是Stu对象
    @PostMapping("stu/update")
    public R updateStu(Stu stu) {
        int i = stuService.updateStu(stu);
        if (i > 0) {
            return R.success();
        }
        return R.fail();
    }
    /**
     * 增加学生信息
     */
    @PostMapping("stu/add")
    public R addStu(@RequestBody Stu stu) {
        int i = stuService.addStu(stu);
        if (i > 0) {
            return R.success();
        }
        return R.fail();
    }
    /**
     * 删除学生信息
     */
    @GetMapping("stu/delete")
    public R deleteStu(Integer id) {
        int i = stuService.deleteStu(id);
        if (i > 0) {
            return R.success();
        }
        return R.fail();
    }
    /**
     * 批量删除
     */
    @PostMapping("stu/deleteBatch")
    public R deleteBatch(@RequestBody List<Integer> ids) {
        int i = stuService.deleteBatch(ids);
        if (i > 0) {
            return R.success();
        }
        return R.fail();
    }

    /**
     * 查询所有学生信息和关联的班级信息
     */
    @GetMapping("stu/queryAllStuAndClass")
    public R queryAllStuAndClass() {
        List<StudentVO> list = stuService.queryAllStuAndClass();
        if (list == null || list.size() == 0) {
            return R.fail();
        }
        return R.success(list);
    }

    /**
     * 查询一个学生信息以及所学习的所有学科信息
     */
    @GetMapping("stu/queryStuAndSubject")
    public R queryStuAndSubject(Integer id) {
        StudentVO studentVO = stuService.queryStuAndSubject(id);
        if (studentVO == null) {
            return R.fail();
        }
        return R.success(studentVO);
    }

    /**
     * 根据id查询1个学生信息以及关联的所有学科信息以及每个学科关联的老师信息
     */
    @GetMapping("stu/queryStuAndSubjectAndTeacher")
    public R queryStuAndSubjectAndTeacher(Integer id) {
        StudentVO studentVO = stuService.queryStuAndSubjectAndTeacher(id);
        if (studentVO == null) {
            return R.fail();
        }
        return R.success(studentVO);
    }
    /**
     * 查询学生信息以及关联的教室信息
     *1. 先根据学生id查询出学生信息,
     * 2. 再通过学生信息中的教室id查出教室信息
     * 3. 然后再把学生信息和教室信息封装到一起就行
     * 4. 这样就变成了单表查询,一次查询学生表,一次查询教室表
     */
    @GetMapping("stu/queryStuAndClass")
    public R queryStuAndClass() {
        List<StudentVO> list = stuService.queryAllStuAndClassV2();
        if (list == null) {
            return R.fail();
        }
        return R.success(list);
    }
/**
 * 查询一个学生信息以及所学习的所有学科信息
 * 1. 先根据学生id查出一个学生信息
 * 2. 再根据学生id去中间关联表中查出该学生对应的所有学科id
 * 3. 再根据每一个学科id查出每一个学科对象
 * 4. 然后组装到一起
 */
@GetMapping("stu/queryStuAndSubjectV2")
    public R queryStuAndSubjectV2(Integer id) {
        StudentVO studentVO = stuService.queryStuAndSubjectV2(id);
        if (studentVO == null) {
            return R.fail();
        }
        return R.success(studentVO);
    }




}
